home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / BitSet.h < prev    next >
C/C++ Source or Header  |  1990-11-28  |  3KB  |  101 lines

  1. #ifndef BitSet_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define BitSet_First
  6.  
  7. //------ class BitSet: a set of small integers (adapted from the oops library)
  8.  
  9. #include "Object.h"
  10.  
  11. class BitSet: public Object {
  12. protected:
  13.     u_long m;
  14.     
  15.     BitSet(unsigned long i, double) // second parameter double is a trick 
  16.                     // to overload BitSet(unsigned long i1);        
  17.     { m= i; }
  18. public:
  19.     MetaDef(BitSet);
  20.  
  21.     BitSet()                        
  22.     { m= 0; }
  23.     BitSet(int i1)                  
  24.     { m= BIT(i1); }
  25.     BitSet(int i1, int i2)        
  26.     { m= BIT(i1)|BIT(i2); }
  27.     BitSet(int i1, int i2, int i3)
  28.     { m= BIT(i1)|BIT(i2)|BIT(i3); }
  29.     BitSet(int i1, int i2, int i3, int i4)
  30.     { m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4); }
  31.     BitSet(int i1, int i2, int i3, int i4, int i5)
  32.     {  m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4)|BIT(i5); }
  33.     BitSet(int i1, int i2, int i3, int i4, int i5, int i6)
  34.     { m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4)|BIT(i5)|BIT(i6); }
  35.     BitSet(int i1, int i2, int i3, int i4, int i5, int i6, int i7)
  36.     { m= BIT(i1)|BIT(i2)|BIT(i3)|BIT(i4)|BIT(i5)|BIT(i6)|BIT(i7); }
  37.     BitSet(BitSet *n)         
  38.     { m= n->m; }
  39.  
  40.     BitSet operator~()              
  41.     { return BitSet(~m, 0.0); }
  42.     BitSet operator-(BitSet n)      
  43.     { return BitSet(m & ~n.m, 0.0); }
  44.     bool operator>(BitSet n)        
  45.     { return m == (m|n.m) && m != n.m; }
  46.     bool operator<(BitSet n)        
  47.     { return n.m == (m|n.m) && m != n.m; }
  48.     bool operator>=(BitSet n)       
  49.     { return m == (m|n.m); }
  50.     bool operator<=(BitSet n)       
  51.     { return n.m == (m|n.m); }
  52.     bool operator==(BitSet n)       
  53.     { return m == n.m; }
  54.     bool operator!=(BitSet n)       
  55.     { return m != n.m; }
  56.     BitSet operator&(BitSet n)      
  57.     { return BitSet(m & n.m, 0.0); }
  58.     BitSet operator^(BitSet n)      
  59.     { return BitSet(m ^ n.m, 0.0); }
  60.     BitSet operator|(BitSet n)      
  61.     { return BitSet(m | n.m, 0.0); }
  62.     // void operator=(BitSet n)        { m = n.m; } // necessary???
  63.     void operator-=(BitSet n)       
  64.     { m &= ~n.m; }
  65.     void operator&=(BitSet n)       
  66.     { m &= n.m; }
  67.     void operator^=(BitSet n)       
  68.     { m ^= n.m; }
  69.     void operator|=(BitSet n)       
  70.     { m |= n.m; }
  71.     int AsMask()                    
  72.     { return m; }
  73.     bool Includes(int i)            
  74.     { return (m & BIT(i)) != 0; }
  75.     bool Contains(int i)            
  76.     { return Includes(i); }
  77.     ObjPtr DeepClone();
  78.     unsigned long Hash();
  79.     bool IsEmpty();
  80.     bool  IsEqual (Object*);
  81.     ostream& PrintOn(ostream&);
  82.     istream& ReadFrom(istream&);
  83.     int Size();
  84.     int Capacity();
  85. };
  86.  
  87. //---- class BitSetIter ---------------------------------------------/
  88.  
  89. class BitSetIter {
  90.     BitSet *cb;
  91.     int pos;
  92. public:
  93.     BitSetIter(BitSet *s)
  94.     { cb=s; pos= 0; }
  95.     
  96.     void Reset(BitSet *);
  97.     int operator()();
  98. };
  99.  
  100. #endif BitSet_First
  101.